﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Data.OleDb;
using DTO;
namespace DAO
{
    public class SachDAO
    {
        // Có 3 cách: List<T>, ArrayList, DataSet
        // Lấy danh sách các cuốn sách tại nhà sách
        public bool DanhSachSacḥ̣̣̣̣̣̣̣(ref ArrayList arrSach,ref ArrayList arrTenLoaiSach, out String err)
        {
            arrSach= new ArrayList();
            arrTenLoaiSach = new ArrayList();
            ArrayList arrTemp= new ArrayList(); // ArrayList tạm chứa dữ liệu từ dataReader
            //B1-2: tao chuỗi kết nối và mở kết nối
            DataProvider dp = new DataProvider();
            OleDbConnection cn = dp.SqlConnect();
            //B3: tao chuỗi thao tác csdl 
            String str= @"select s.id, s.maSach, s.tenSach,ls.maLoaiSach, ls.tenLoaiSach, s.tacGia, s.nhaXuatBan, s.giaBan, s.soLuong 
                            from Sach s inner join LoaiSach ls  on s.maLoaiSach=ls.maLoaiSach";
                            //where s.idLoaiSach=ls.id";
            //B4: thực thi câu lệnh
            OleDbDataReader dr=null;
            OleDbCommand cmd = new OleDbCommand(str, cn);
            try 
            {
                 dr= cmd.ExecuteReader();
            }
            catch(Exception e)
            {
                err = e.ToString();
                cn.Close();
                cmd.Connection.Close();
                cmd.Connection.Dispose();
                return false;
            }
            err = "";
            int n=0;
            ArrayList columnOfRow=null;
            // Đọc  dữ liệu từ dataReader vào ArrayList
            while (dr.Read())
            {
                columnOfRow = new ArrayList();
                n = dr.FieldCount; // đếm số cột của dòng trong dataReader
                for (int i = 0; i < n; i++)
                {
                    columnOfRow.Add(dr.GetValue(i));
                }
                arrTemp.Add(columnOfRow);
            }
            //Đưa data từ ArrayList vào danh sách sách
            int soLuong = arrTemp.Count;
            SachDTO sach;
            LoaiSachDTO loaiSach;
            for (int i = 0; i < soLuong; i++)
            {
                loaiSach = new LoaiSachDTO();
                sach = new SachDTO();
                sach.Id = (((ArrayList)arrTemp[i])[0])==DBNull.Value ? 0 :((int)((ArrayList)arrTemp[i])[0]);
                sach.MaSach = (((ArrayList)arrTemp[i])[1])==DBNull.Value ? "": ((string)((ArrayList)arrTemp[i])[1]);
                sach.TenSach = (((ArrayList)arrTemp[i])[2]) == DBNull.Value ? "" : ((string)((ArrayList)arrTemp[i])[2]);
                loaiSach.TenLoaiSach=(((ArrayList)arrTemp[i])[4])==DBNull.Value ? "" :((string)(((ArrayList)arrTemp[i])[4]));
                sach.TacGia=(((ArrayList)arrTemp[i])[5])==DBNull.Value ? "" : (string)(((ArrayList)arrTemp[i])[5]);
                sach.NhaXuatBan = (((ArrayList)arrTemp[i])[6]) == DBNull.Value ? "" : (string)(((ArrayList)arrTemp[i])[6]);
                sach.GiaBan = (((ArrayList)arrTemp[i])[7]) == DBNull.Value ? 0 : (Double)(((ArrayList)arrTemp[i])[7]);
                sach.SoLuong = (((ArrayList)arrTemp[i])[8]) == DBNull.Value ? 0 : (int)(((ArrayList)arrTemp[i])[8]);

                arrSach.Add(sach);
                arrTenLoaiSach.Add(loaiSach);
            }
            //B5: đóng kết nối
            cn.Close();
            return true;           
        }


        //thêm sách mới
        //xóa cuốn sách
        //cập nhật thông tin sách


            
            
           
    }
}
